/**
 * 支持以字符串的方式取对象的属性或者数组的下标，如果中途取到undefined，就返回某个指定值（默认为空字符串）
 *
 * 作用：避免对undefined的继续向下取值，防止报TypeError错
 *
 * @param {object|array} obj 被取属性/下标的变量
 * @param {string} search 取字符串
 * @param {string} [re=""] 取值失败的默认返回值
 * @returns
 */
export default function ignoreErrorAttr(obj, search = '', re = '') {
  const arr = search.split('.')
  if (!obj) {
    return re
  }
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].indexOf('[') >= 0 && arr[i].indexOf(']') >= 0) {
      let index = arr[i].split('[')[1].split(']')[0]
      obj = obj[index]
    } else {
      obj = obj[arr[i]]
    }
    if (obj === undefined || obj === null) {
      return re
    }
  }
  return obj
}

/**
 * 拷贝一个副本
 */
export function copy(obj) {
  if (Array.isArray(obj)) {
    return Array.from(obj)
  }
  if (typeof a === 'object') {
    return Object.assign({}, obj)
  }
  return obj
}
/**
 *
 */
export function objectGet(obj, def) {
  if (obj === undefined) {
    return def
  }
  if (obj === null) {
    return def
  }
  if (obj instanceof Function) {
    console.warn('obj instanceof Function')
  }
  return obj
}
/**
 * 获取
 */
export function objectGetByFunc(getObjFunc, def) {
  var obj = def
  try {
    obj = getObjFunc()
  } catch (err) {
    console.log(err)
  }

  return objectGet(obj, def)
}
